Computers and other systems have used disk drives for many years to store large amounts of digital information. This is because while computers and other systems may have sufficient main memory (such as random access memory) to perform ongoing computational tasks, when storing large amounts of data, such as an operating system, application programs, or program data, a mass storage device such as a disk drive is usually required.
There are many types of mass storage devices, including floppy disks, hard disks, optical disks (which includes DVD and CD devices), and non-volatile solid state memory devices (such as RAM disk). Those mass storage devices will be generically referred to as mass storage devices. Furthermore, many different technologies have been used to interface with mass storage devices. Today, in the personal computer environment there are two predominant general interface technologies: SCSI (small computer system interface) and IDE (Intelligent Drive Electronics, or Integrated Drive Electronics). Both technologies have numerous implementations within their general interface scheme. For example, SCSI-1, SCSI-2, Wide SCSI, Fast SCSI, Fast Wide SCSI, Ultra SCSI, SCSI-3, Ultra2 SCSI, Wide Ultra2 SCSI, EIDE, UDMA IDE, and Ultra-ATA IDE, and so on. Other competing systems include fiber channel, internet like fiber channel, external fiber channel, SAS, and so on.
IDE is a generic term that refers to a disk drive having a built-in controller. A built-in controller is a major advantage because a mass storage device manufacturer does not have to make their devices compatible with any particular controller standard. All that is required is an IDE connector that interfaces a motherboard with the mass storage device.
Today, most interface technologies interface a mass storage device and a motherboard over a parallel bus, such as the PCI (Peripheral Component Interconnect) bus. However, other types of drives can connect through a parallel port or other port, such as the ISA (Industry Standard Architecture) bus.
Each type of storage device requires a driver to interface with a host controller of a host computer system. Each driver has a transport layer that allows that driver to communicate with its respective storage device. At some layer of abstraction, all personal computers operate using a Small Computer System Interface SCSI-type format. The host controller and the storage device driver translate the SCSI-type format commands to that used by the storage device. Serial attached SCSI, a new format, includes an optional extension that supports Serial Advanced Technology Attachment (SATA). This allows mixing and matching of serial attached SCSI and SATA storage devices. All other protocols are essentially a SCSI protocol encapsulated with some type of transport layer. So, if the transport layer is removed, all devices talk SCSI. However, as described above, the transport layer is required to communicate with the storage device.
No matter the type of memory or the interface technology, data storage or data recover is initiated by a processor that causes a host controller to interface the processor to a mass storage device. Data flows to and from the mass storage device through the host controller. In personal computers, the parallel data storage ATA (AT Attachment) specification has defined the standard storage interface for PCs since the 1980s. ATA stands for Advanced Technology Attachment, which refers to a disk drive that has an integrated controller on the disk drive itself. Parallel ATA is low cost, widely supported, well known and well accepted, and has proven capable of high speed performance. There are several versions of ATA. By itself ATA is used interchangeably with IDE, ATA-2 (EIDE/ Fast ATA) supports faster operating modes and multiword DMA modes, supports logical block addressing (LBA) and block transfers; ATA-3, Ultra-ATA (Ultra-DMA, ATA-33, and DMA-33) supports multiword DMA mode 3 running at 33 MBps, ATA/66 doubles ATA's throughput, and ATA/100.
While parallel ATA has proven beneficial, it has limitations. It requires many pins and parallel conductors, uses 5 volt technology, and is difficult to implement in a manner that supports the high data rates required for multimedia applications. Because of those shortcomings, Serial ATA, also known as SATA, a high-performance interface for storage devices, has been developed. Not to be outdone, a serial interface specification for SCSI disk drives also has been developed.
The proliferation of storage device types and the increased storage dimensions of modern disk drives have created problems. Simply storing and retrieving data can consume a significant portion of a processor's time. This has created a need for host bus adapters (HBA) that interface a host computer's bus (usually PCI) to the bus or busses to the storage devices while minimizing the impact on a host processor's performance. This requires that the host bus adaptor handle many low-level interface functions, either automatically or with minor host processor or storage device processor involvement. For example, Intel has developed an Advanced Host Controller Interface (AHCI) specification that describes at the register level how a SATA device interfaces with a host controller's hardware. A serial SCSI device can have a completely different HBA.
Since a bus to a storage device can be one of several standardized busses, or can even be a custom bus, the host bus adaptor must be matched to the storage device that is used. All computer storage device bus ports essentially operate on a SCSI-like command level. In the prior art, a storage device's command protocol was implemented using a software driver that interfaced commands from a dedicated host controller to the storage device. The software driver required the interaction of the host processor. The host controller and the software driver effectively translated the SCSI-type format to the storage device's protocol. With large memory devices in applications that made many file system interactions the host processor spent an inordinate amount of time implementing the software driver. This can be extremely difficult or expensive to do since available storage devices may not be known at the time the HBA is added to a system, can change over time, or can be customized to fit particular applications.
FIG. 1 is a conceptual diagram illustrating how a prior art file management system 100 (or storage stack) interacts with storage device hardware 114. File management system 100 implemented both a volume manager 104 that directed file system 102 requests to a particular storage volume and a partition manager 106 that directed file system 102 requests to a particular partition within that storage volume. These can be considered as identifying available storage devices of the host computer system. File management system 100 also implemented a class (such as SCSI or IDE) driver 108 to support storage classes and a port driver 110 to enable port I/O operations. A bus driver 112 was implemented as required to pass signals on the required busses without bus conflicts, and finally storage device hardware 114 would be connected to a storage bus of the storage device being accessed. The class driver 108, port driver 110 and bus driver 112, together, act as the transport layer for the driver associated with the storage device being accessed. If desired, the file management system 100 could also implement data compression and encryption 103. Two drawbacks of the architecture generally illustrated here are that (i) it requires a separate transport layer for each type of storage device used in the host computer system and (ii) upwards of 90% of transactions between the file system 102 (i.e. the operating system) and the various storage devices of the host computer system are READ/WRITE operations—such operations do not typically require the services of layers 103, 106, 108, 110 and 112 of the file management system 100. Processing each transaction through needed intermediate layers is insufficient and time consuming. Therefore, a new type of device that can interface a host computer's bus to multiple storage devices would be beneficial. Even more beneficial would be a universal storage bus adaptor that can interface a host computer's bus to any of multiple storage devices.